export default function (Vue) {
  // 不挂在原型上，而是通过混入每个儿子（子混入给孙）即组件有router的一些属性和方法
  // mergeOptions(自己的, 混入的); => 合并成数组依次执行
  Vue.mixin({
    beforeCreate() {
      // console.log('beforeCreate');
      if (this.$options.router) {
        // console.log('父', this.$options.name)
        // this 是 new VueRouter的实例
        this._routerRoot = this;
        // 
        this._router = this.$options.router;
        // 仅初始化init一次
        this._router.init(this);
        // Vue.util.defineReactive(this, '_route', this._router.history.current)
      } else {
        // console.log('子', this.$options.name)
        this._routerRoot = (this.$parent && this.$parent._routerRoot) || this;
      }
    },
  })

  Object.defineProperty(Vue.prototype, '$router', {
    get () { return this._routerRoot._router }
  })

  Object.defineProperty(Vue.prototype, '$route', {
    get () { return this._routerRoot._route }
  })

};
